The success of applications is not only determined by functional correctness, but also by several non-functional requirements. One of the most important non-functional aspects is performance. Profiling of a virtual machine (VM) helps to analyze the resource consumption of an application or applications running on a VM. Profiling can be useful for a number of reasons, such as identifying performance bottlenecks, exhaustive memory usage, or poor synchronization.
Profiling typically involves an adapted configuration setup of the application, such as by applying command line arguments, starting other processes, or instrumenting an executable. The scenario to be profiled is then executed while the profiling backend monitors the execution. State of the art profiling techniques allow users to drill down during a manual analysis of the profiling data using a profiling frontend. Sometimes profiling experts (people who specialize in analyzing profiled data) are used to reduce the time of the analysis for the user, but the necessity of human interaction limits the use of profiling in highly distributed systems with lots of application nodes.